public class test {
    //方法的重载
    //1.方法名相同 2.参数列表不同 3.与返回值类型是否相同无关

    public static int add(int a,int b){
        return a+b;
    }
    public static int add(int a,int b,int c){
        return a+b;
    }
    public static double add(double a,double b){
        return a+b;
    }

    //递归计算1~10的和
    public static  int sumN(int n){
        int sum = 0;
        if(n==1){
            return  1;
        }
        sum = n+sumN(n-1);

        return sum;
    }

    //递归计算一个数各位和
    public static int sumNum(int n){
        if(n<10){
            return n;
        }
        int sum = sumNum(n/10) + n%10;
        return  sum;
    }

    //递归计算一个数字的每一位
   public static void every(int n){
        if(n<10) {
            System.out.println(n);
        }else {
            every(n/10);
            System.out.println(n%10);
        }
   }


    //递归计算一个数字的每一位
   public static  void print(int n){
        if(n>9){
           print(n/10);
        }
        System.out.print(n%10+" ");
   }


    //计算阶乘
    public  static  int fac(int n){
        int ret = 1;
        for(int i = 1;i<=n;i++){
            ret *=i;
        }
        return ret;
    }

    //递归实现阶乘方法
    public static  int facFun(int n){
        if(n == 1){//递归出口，其实条件，遇到这个条件开始“归”。
            return  1;
        }
        int tmp =n * facFun(n-1);
        return tmp;
    }
    //计算阶乘的和
    public static int facSum(int s){
        int sum = 0;
        for(int i = 1;i<=s;i++ ){
            sum+=fac(i);
        }
        return  sum;
    }



    //判断闰年
    public  static  boolean isYear(int year){ //void代表无返回值类型
        if((year % 4==0 && year % 100!=0) || year % 400==0){
            System.out.println(year+"是闰年");
            return true;
        }else {
            System.out.println(year+"不是闰年");
            return false;
        }
    }

  //递归求斐波那契数列
    public  static int fib(int n){
        if(n==1){
            return 0;
        }
        if(n==2){
            return 1;
        }
        return fib(n-1)+fib(n-2);

    }



    //循环求斐波那契数列
    public  static int fib2(int n){
        if(n==1){
            return 0;
        }
        if(n==2){
            return 1;
        }
        int f1= 0;
        int f2 = 1;
        int f3 = 1;
       for(int i = 3;i<=n;i++){
           f3 = f2 +f1;
           f1 = f2;
           f2 = f3;
       }
       return  f3;
    }




    public static void main(String[] args) {

        System.out.println(fib(5));
//        System.out.println(fib(7));
//        System.out.println(fib(8));
//        System.out.println(fib(9));
        System.out.println(fib2(5));


//        System.out.println(sumNum(123));

//        every(456);
//        System.out.println(facFun(5));
//        print(1234);

//        System.out.println(sumN(10));
//        boolean flg = isYear(2025);//取返回值
//        System.out.println(flg);

//        boolean flg1 = isYear(2020);
//        System.out.println(flg1);
//        System.out.println("----------");
//
//
//
//        int n = fac(5);
//        System.out.println(n);
//        System.out.println(fac(6));
//        System.out.println("----------");

//        int nsum = facSum(5);
//        System.out.println(nsum);
//        System.out.println(facSum(6));


    }
}
